package gob.cgr.sgrh.ejb.session;

import java.util.List;

import gob.cgr.sgrh.ejb.entidad.Puesto;
import gob.cgr.sgrh.ejb.entidad.PuestoAnalisis;
import gob.cgr.sgrh.ejb.entidad.PuestoCabecera;
import gob.cgr.sgrh.ejb.entidad.PuestoCapacitacion;
import gob.cgr.sgrh.ejb.entidad.PuestoEducacion;
import gob.cgr.sgrh.ejb.local.PuestoDAO;

import javax.ejb.Local;
import javax.ejb.Stateless;
import javax.persistence.Query;

@Local
@Stateless
public class PuestoSession extends GenericSessionImpl<Puesto, Integer>
implements PuestoDAO{

	@Override
	public Puesto obtenerCompleto(Integer id) {
		Puesto p=super.obtener(id);
		List<PuestoCapacitacion> pcs=p.getIdPuestoAnalisis().getPuestoCapacitacionList();
		List<PuestoEducacion> pes=p.getIdPuestoAnalisis().getPuestoEducacionList();
		System.out.println("colocando pcs "+pcs);
		p.getIdPuestoAnalisis().setPuestoCapacitacionList(pcs);
		System.out.println("colocando pes "+pes);
		p.getIdPuestoAnalisis().setPuestoEducacionList(pes);
		
		return p;
	}

	@Override
	public List<Puesto> listarPorIdUnidadOrganica(Integer idUnidadOrganica) {
		// TODO Auto-generated method stub
		Query q=getEm().createNamedQuery("Puesto.listarPorUO");
		q.setParameter("idUnidadOrganica",idUnidadOrganica);
		return q.getResultList();
	}

	@Override
	public Puesto registrarPuesto(Puesto object) {
		// TODO Auto-generated method stub
		PuestoCabecera pc=object.getPuestoCab();
		if(pc.getIdPuestoCab()==null){
			System.out.println("registrando la cabecera del puesto");
			getEm().persist(pc);
			object.setPuestoCab(pc);
		}
		
		PuestoAnalisis pa=object.getIdPuestoAnalisis();
		List<PuestoEducacion> pes=pa.getPuestoEducacionList();
		List<PuestoCapacitacion> pcs=pa.getPuestoCapacitacionList();
		if(pa.getIdPuestoAnalisis()==null){
			System.out.println("registrando puesto analisis");
			pa.setPuestoCapacitacionList(null);
			pa.setPuestoEducacionList(null);
			getEm().persist(pa);
			System.out.println("registrado el puesto analisis :"+pa.getIdPuestoAnalisis()+",  devolviendo sus listas y actualizarlas");
			for(PuestoCapacitacion pca:pcs){
				pca.setIdPuestoCapacitacion(null);
				pca.setPuestoAnalisis(pa);
				getEm().persist(pca);
			}
			for(PuestoEducacion pe:pes){
				System.out.println("puesto capacitacion regsitro..");
				pe.setIdPuestoEducacion(null);
				pe.setPuestoAnalisis(pa);
				getEm().persist(pe);
			}
			pa.setPuestoCapacitacionList(pcs);
			pa.setPuestoEducacionList(pes);
			System.out.println("registrado todo puesto analisis");
			object.setIdPuestoAnalisis(pa);
			
		}
		System.out.println("registrando el puesto en si");
		super.registrar(object);
		System.out.println("registrando el puesto OK");
		return object;
	}

	@Override
	public PuestoEducacion actualizarPuestoEducacion(PuestoEducacion pe) {
		if(pe.getIdPuestoEducacion()==null){
			getEm().persist(pe);
		}
		else
			getEm().merge(pe);
		
		
		
		return pe;
	}

	@Override
	public PuestoCapacitacion actualizarPuestoCapacitacion(PuestoCapacitacion pc) {
		if(pc.getIdPuestoCapacitacion()==null){
			getEm().persist(pc);
		}
		else
			getEm().merge(pc);
		return pc;
	}

	@Override
	public void eliminarPuestoEducacion(PuestoEducacion pe) {
		// TODO Auto-generated method stub
		getEm().remove(getEm().merge(pe));
	}

	@Override
	public void eliminarPuestoCapacitacion(PuestoCapacitacion pe) {
		// TODO Auto-generated method stub
		getEm().remove(getEm().merge(pe));
	}
	
	
}
